package poo.biblioteca.controladores;

import biblioteca.entidades.Lector;
import biblioteca.entidades.TipoLector;
import biblioteca.excepciones.ExcepcionDeAplicacion;
import biblioteca.excepciones.ExcepcionDeBD;
import biblioteca.modelos.MdlLectores;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.event.InternalFrameAdapter;
import javax.swing.event.InternalFrameEvent;
import poo.biblioteca.vistas.FrmPrincipal;
import poo.biblioteca.vistas.lectores.IfrRegistrarLector;
import poo.biblioteca.vistas.lectores.IfrRegistrarTipoLector;

public class CtrLectores {

    private FrmPrincipal principal;
    //Vistas
    //------TipoLector
    private IfrRegistrarTipoLector ifrRegistrarTipoLector = null;
    private IfrRegistrarLector ifrRegistrarLector = null;

    //Modelos
    private MdlLectores mdlLectores = new MdlLectores();
    
    public CtrLectores(FrmPrincipal principal) {
        this.principal = principal;
    }

    //<editor-fold defaultstate="collapsed" desc="Tipo de Lector">
    public void registrarTipoLector() {
        if (ifrRegistrarTipoLector != null) {
            return;
        }

        ifrRegistrarTipoLector = new IfrRegistrarTipoLector();


        ifrRegistrarTipoLector.btnCancelarAddActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                ifrRegistrarTipoLector.setVisible(false);
                ifrRegistrarTipoLector = null;
            }
        });

        ifrRegistrarTipoLector.btnOkAddActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                TipoLector nuevoTipoLector = new TipoLector(
                        -1,
                        ifrRegistrarTipoLector.getPanel().getNombreTipoLector(),
                        ifrRegistrarTipoLector.getPanel().getNumeroDiasPrestamo(),
                        ifrRegistrarTipoLector.getPanel().getNumeroMaxPrestamosSimultaneos()
                        );
                try {
                    mdlLectores.registrarTipoLector(nuevoTipoLector);
                    ifrRegistrarTipoLector.mostrarMensajeInformativo("Se registró correctame el nuevo Tipo de Lector",
                            "Registro correcto");
                    ifrRegistrarTipoLector.getPanel().limpiarCampos();
                } catch (ExcepcionDeAplicacion ex) {
                    ifrRegistrarTipoLector.mostrarMensajeError(ex.getMessage(), "Registro incorrecto");
                }
                
            }
        });

        ifrRegistrarTipoLector.addInternalFrameListener(new InternalFrameAdapter() {

            @Override
            public void internalFrameClosed(InternalFrameEvent e) {
                ifrRegistrarTipoLector = null;
            }
        });

        principal.addComponenteADesktop(ifrRegistrarTipoLector);
        ifrRegistrarTipoLector.setVisible(true);
    }
    //</editor-fold>

    public void registrarLector() {
        if (ifrRegistrarLector != null) {
            return;
        }

        ifrRegistrarLector = new IfrRegistrarLector();
        
        try {
            ifrRegistrarLector.getPanel().setTiposDeLectores(mdlLectores.leerTipoDeLectores());
        } catch (ExcepcionDeBD ex) {
            ifrRegistrarLector.mostrarMensajeError(ex.getMessage(), "Error de BD");
            ifrRegistrarLector.setVisible(false);
            ifrRegistrarLector = null;
        }
        
        ifrRegistrarLector.getPanel().cmbTipoLectorAddActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                if (ifrRegistrarLector.getPanel().getTipoLector().getNombreTipoLector().contains("Alumno"))
                    ifrRegistrarLector.getPanel().habilitarCampoCódigoAlumno(true);
                else
                    ifrRegistrarLector.getPanel().habilitarCampoCódigoAlumno(false);
            }
        });

        ifrRegistrarLector.btnCancelarAddActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                ifrRegistrarLector.setVisible(false);
                ifrRegistrarLector = null;
            }
        });

        ifrRegistrarLector.btnOkAddActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                Lector nuevoLector = new Lector(
                        -1,
                        ifrRegistrarLector.getPanel().getNombres(),
                        ifrRegistrarLector.getPanel().getApellidos(),
                        ifrRegistrarLector.getPanel().getCodigoAlumno(),
                        ifrRegistrarLector.getPanel().getTipoLector(),
                        null,
                        ifrRegistrarLector.getPanel().getDni(),
                        ifrRegistrarLector.getPanel().getEmail(),
                        ifrRegistrarLector.getPanel().getTelefono());
                try {
                    mdlLectores.registrarLector(nuevoLector);
                    ifrRegistrarLector.mostrarMensajeInformativo("Se registró correctame el nuevo Lector",
                            "Registro correcto");
                    ifrRegistrarLector.getPanel().limpiarCampos();
                } catch (ExcepcionDeAplicacion ex) {
                    ifrRegistrarLector.mostrarMensajeError(ex.getMessage(), "Registro incorrecto");
                }
                
            }
        });

        ifrRegistrarLector.addInternalFrameListener(new InternalFrameAdapter() {

            @Override
            public void internalFrameClosed(InternalFrameEvent e) {
                ifrRegistrarLector = null;
            }
        });

        principal.addComponenteADesktop(ifrRegistrarLector);
        ifrRegistrarLector.setVisible(true);
    }
}
